/*
	朋友聚会的时候可能会玩一个游戏：
	逢七过。
	规则是：从任意一个数字开始报数，当你要报的数字包含7或者是7的倍数时都要说：过。
	为了帮助大家更好的玩这个游戏，这里我们直接在控制台打印出1-100之间的满足逢七必过规则的数据。?
	这样，大家将来在玩游戏的时候，就知道哪些数据要说：过。
	//可自定:1上下限 2逢几过 3
 */
public class Hw09EverySeven {
    public static void main(String[] args) {
        //逢 n 过
        int n = 7, weiMax = 3;//最高位数 weiMax
        int lower = 1, upper = 100;//上下限
        int[] digit = new int[3];
        int i, k, j;
        /*
            范围内遍历,找到符合条件的并输出
                *不要重复输出:if-else
                *大多数据不到最高位数,区分有意义0 与 无意义0
                *注意程序的简洁性,善用循环
        */
        System.out.println("逢" + n + "过");
        for (i = lower; i <= upper; i++) {
            //将各个位的数字存入数组
            int temp = i;
            if (i % n == 0){
                System.out.println(i);
            }else{
                for (int p = 0; p < weiMax; p++) {
                    digit[p] = temp % 10;
                    temp /= 10;
                    if (digit[p] == n) {//只要任何一位上数字等于逢几数字,即可输出并跳出循环,2`4行左右
                        System.out.println(i);
                        break;
                    }
                }
            }

            /*
            优化
            只要任何一位上数字等于逢几数字,即可输出并跳出循环,2`4行左右
            */
            /*
            //输出n的倍数
            if(i % n == 0){
                System.out.println(i);//小心 7\70\77
            }else {
                //如果不是倍数,则判断并输出含n的数
                j = weiMax - 1;
                lo:while(j >= 0) {
                    if (digit[j] > 0)//从最高位排查其是否等于零,0则该位无意义,eg:0070
                        for (k = j; k >= 0; k--) {//存在值的最高位及之后是否有含n
                            if ((digit[k] != 0) && (digit[k] % n == 0)){
                                System.out.println(i);
                                break lo;//任一位找到含n,跳出进入下一个数(注意不要重复输出)
                            }
                        }
                    j--;
                }//循环输出含n数
            }
        }//有效程序结束点


        System.out.println("游戏愉快!");

             */
        }//主函数结束点
    }
}